package beans;

import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.RowEditEvent;

import menagement.ProdottoBaseMgr;
import menagement.dto.EscursioneDTO;
import menagement.dto.HotelDTO;
import menagement.dto.PacketDTO;
import menagement.dto.PrenotazioneDTO;
import menagement.dto.VoloDTO;



@ManagedBean(name="beanProdottoBase")
@SessionScoped
public class ProdottoBaseBean {
	
	@EJB
	private ProdottoBaseMgr pbm;
	
	private EscursioneDTO edto;
	private HotelDTO hdto;
	private VoloDTO vdto;
	private ArrayList <VoloDTO> listaVoli;
	private ArrayList <HotelDTO> listaHotel;
	private ArrayList <EscursioneDTO> listaEscursioni;
	private Date dataOdierna= new Date();
	private List<HotelDTO> filteredHotels;
	private List<VoloDTO> filteredVoli;
	private List<EscursioneDTO> filteredEscursioni;

	
	public ProdottoBaseBean(){
		edto=new EscursioneDTO();
		hdto=new HotelDTO();
		vdto=new VoloDTO();
		filteredHotels= new ArrayList<HotelDTO>();
		filteredVoli= new ArrayList<VoloDTO>();
		filteredEscursioni= new ArrayList<EscursioneDTO>();
	}
	
	
	
	public List<VoloDTO> getFilteredVoli() {
		return filteredVoli;
	}



	public void setFilteredVoli(List<VoloDTO> filteredVoli) {
		this.filteredVoli = filteredVoli;
	}



	public List<EscursioneDTO> getFilteredEscursioni() {
		return filteredEscursioni;
	}



	public void setFilteredEscursioni(List<EscursioneDTO> filteredEscursioni) {
		this.filteredEscursioni = filteredEscursioni;
	}



	public List<HotelDTO> getFilteredHotels() {
		return filteredHotels;
	}



	public void setFilteredHotels(List<HotelDTO> filteredHotels) {
		this.filteredHotels = filteredHotels;
	}



	public ArrayList<VoloDTO> getListaVoli() {
		return listaVoli;
	}

	
	
	public Date getDataOdierna() {
		return dataOdierna;
	}


	public void setDataOdierna(Date dataOdierna) {
		this.dataOdierna = dataOdierna;
	}


	public void setListaVoli(ArrayList<VoloDTO> listaVoli) {
		this.listaVoli = listaVoli;
	}


	public ArrayList<HotelDTO> getListaHotel() {
		return listaHotel;
	}


	public void setListaHotel(ArrayList<HotelDTO> listaHotel) {
		this.listaHotel = listaHotel;
	}


	public ArrayList<EscursioneDTO> getListaEscursioni() {
		return listaEscursioni;
	}


	public void setListaEscursioni(ArrayList<EscursioneDTO> listaEscursioni) {
		this.listaEscursioni = listaEscursioni;
	}


	public EscursioneDTO getEdto(){
		return edto;
	}
	public void setEdto(EscursioneDTO escursione){
		this.edto=escursione;
	}
	public String saveEscursione() {
		Time durataFinale= new Time(edto.getOreDurata(),edto.getMinutiDurata(),0);
		edto.setDurata(durataFinale);
		pbm.save(edto);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("beanProdottoBase", null);
		return "index?faces-redirect=true";
	}
	
	public HotelDTO getHdto(){
		return hdto;
	}
	public void setHdto(HotelDTO hotel){
		this.hdto=hotel;
	}
	public String saveHotel(){
		System.out.println(hdto.getIndirizzo()+" "+hdto.getNome()+" "+hdto.getCitta());
		pbm.save(hdto);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("beanProdottoBase", null);
		return "index?faces-redirect=true";
	}
	
	public VoloDTO getVdto(){
		return vdto;
	}
	public void setVdto(VoloDTO volo){
		this.vdto=volo;
	}
	
	public String saveVolo(){
		
		System.out.println("SONO NEL BEAN!"); //	da cancellare, SOLO X PROVA
		Time durataFinale= new Time(vdto.getOreDurata(),vdto.getMinutiDurata(),0);
		vdto.setDurata(durataFinale);
		pbm.save(vdto);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("beanProdottoBase", null);
		return "index?faces-redirect=true";
	}
	
	public void retrieveVoli(){
		listaVoli= pbm.trovaVoli();
		for(int i=0; i<listaVoli.size();i++){
			listaVoli.get(i).setOreDurata(listaVoli.get(i).getDurata().getHours());
			listaVoli.get(i).setMinutiDurata(listaVoli.get(i).getDurata().getMinutes());
		}
		//metodo per trasformare time in ora e minuti
		
	}
	public void retrieveHotel(){
		listaHotel=pbm.trovaHotel();
	}
	public void retrieveEscursioni(){
		listaEscursioni=pbm.trovaEscursioni();
	}
	
	public void updateVolo(RowEditEvent event){
		Time time= new Time(((VoloDTO) event.getObject()).getOreDurata(),((VoloDTO) event.getObject()).getMinutiDurata(),0);
		((VoloDTO) event.getObject()).setDurata(time);
		pbm.update((((VoloDTO) event.getObject())));
		FacesMessage msg = new FacesMessage("Volo Modificato","");
        FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	public void updateHotel(RowEditEvent event){
		pbm.update((((HotelDTO) event.getObject())));
		FacesMessage msg = new FacesMessage("Hotel Modificato","");
        FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	public void updateEscursione(RowEditEvent event){
		pbm.update((((EscursioneDTO) event.getObject())));
		FacesMessage msg = new FacesMessage("Escursione Modificata","");
        FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	public void deleteHotel(RowEditEvent event){
		pbm.delete((((HotelDTO) event.getObject())));
		FacesMessage msg = new FacesMessage("Hotel eliminato",((HotelDTO) event.getObject()).getNome());
        FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	public void deleteEscursione(RowEditEvent event){
		pbm.delete((((EscursioneDTO) event.getObject())));
		FacesMessage msg = new FacesMessage("Escursione eliminata",((EscursioneDTO) event.getObject()).getNome());
        FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	public void deleteVolo(RowEditEvent event){
		pbm.delete((((VoloDTO) event.getObject())));
		FacesMessage msg = new FacesMessage("Volo eliminato",Integer.toString(((VoloDTO) event.getObject()).getCodice()));
        FacesContext.getCurrentInstance().addMessage(null, msg);
	}
	public void printer(RowEditEvent event){
		System.out.println("Entrato nel printer");
	}
}
